#include "gtest/gtest.h"
#include "File.h"
#include "Carte.h"

class FileTesteur: public ::testing::Test
{
public:
	File<int> file;
};

TEST_F(FileTesteur, constructeursVideOK)
{
	EXPECT_TRUE(true);
	EXPECT_TRUE(file.estVide());
}

TEST_F(FileTesteur, enfilerElement)
{
   file.enfiler(10);
   file.enfiler(20);
   file.enfiler(30);

   EXPECT_EQ(3, file.taille());
   EXPECT_FALSE(file.estVide());
}

TEST_F(FileTesteur, defilerElement)
{
	file.enfiler(10);
	file.enfiler(20);
	file.enfiler(30);

	EXPECT_EQ(10, file.defiler());
	EXPECT_EQ(20, file.defiler());
	EXPECT_EQ(30, file.defiler());

	EXPECT_TRUE(file.estVide());
	EXPECT_THROW(file.defiler(),std::logic_error);
}

TEST_F(FileTesteur, Sommet)
{
	EXPECT_THROW(file.premier(),std::logic_error);

	file.enfiler(10);

	EXPECT_EQ(10, file.premier());
}

TEST_F(FileTesteur, Queue)
{
	EXPECT_THROW(file.dernier(),std::logic_error);

	file.enfiler(10);
	file.enfiler(20);

	EXPECT_EQ(20, file.dernier());
}

TEST_F(FileTesteur, OperateurAssignation)
{

   file.enfiler(10);
   file.enfiler(20);
   file.enfiler(30);

   File<int> fileCopie;
   fileCopie = file;

   EXPECT_EQ(file.taille(), fileCopie.taille());
   EXPECT_EQ(file.premier(), fileCopie.premier());
   EXPECT_EQ(file.dernier(), fileCopie.dernier());
   EXPECT_EQ(file.defiler(), fileCopie.defiler());
   EXPECT_EQ(file.defiler(), fileCopie.defiler());
   EXPECT_EQ(file.defiler(), fileCopie.defiler());
}

TEST_F(FileTesteur, OperateurDAcces)
{

   file.enfiler(10);
   file.enfiler(20);
   file.enfiler(30);

   File<int> fileCopie;
   fileCopie = file;

   EXPECT_EQ(file[0], fileCopie[0]);
   EXPECT_EQ(file[1], fileCopie[1]);
   EXPECT_EQ(file[2], fileCopie[2]);

   EXPECT_THROW(file[4],std::out_of_range);
}

TEST_F(FileTesteur, ConstructeurCopieOK)
{
	file.enfiler(10);
	file.enfiler(20);
	file.enfiler(30);

	File<int> fileCopie(file);

	EXPECT_EQ(file.taille(), fileCopie.taille());
	EXPECT_EQ(file.premier(), fileCopie.premier());
	EXPECT_EQ(file.dernier(), fileCopie.dernier());
	EXPECT_EQ(file.defiler(), fileCopie.defiler());
	EXPECT_EQ(file.defiler(), fileCopie.defiler());
	EXPECT_EQ(file.defiler(), fileCopie.defiler());

}





